<?php

	/**
	 * Min klass LOGIN HANDLER har hand om funktionerna för att användaren ska kunna logga in och kunna logga ut.
	 * Innehåller även en funktion för att kontrollera om användaren är inloggad.
	 */
	 
	class LoginHandler {
		// Skapar en privat variabel för att undvika "strängberoenden". Så om jag vill ändra variabelnamn på min session så behöver jag bara göra det på ett ställe nu.	
		private $sessionUserLogsIn = 'sessionUserLogsIn';				
		
		
		//----- FUNKTION: USER IS LOGGED IN ----------------------------------------------------------------------------------------
		/**
		* Funktion för att kontrollera om användaren är inloggad med hjälp av session.
		* @return bool
		*/
		public function UserIsLoggedIn()
		{
			if(isset($_SESSION[$this -> sessionUserLogsIn])){
				return true;	
			}
			return false;
		}
		
				
		//----- FUNKTION: USER LOGS IN ----------------------------------------------------------------------------------------
		/**
		* Funktion för att logga in användaren med hjälp av användarnamn och lösenord.
		* @param string $myUsername inparameter som innehåller datan som användaren skrev in.
		* @param string $myPassword inparameter som innehåller datan som användaren skrev in.
		* @return bool
		*/
		public function UserLogsIn($myUsername, $myPassword)
		{
			switch ($myUsername) {
				case 'Buffy':
					if ($myPassword == 'slayer'){ 
					break;
					}
					
				case 'Willow':
					if ($myPassword == 'witch'){ 
					break;
					}
					
				case 'Angel':					
					if ($myPassword == 'vampire'){ 
					break;
					}
				
				default:					
					return false;
			}
			// Om SWITCH-satsen går igenom så sätter jag sessionen = true, användaren är inloggad.
			$_SESSION[$this -> sessionUserLogsIn] = true;
			return true;			
		}
		
		
		//----- FUNKTION: USER LOGS OUT ----------------------------------------------------------------------------------------
		/**
		* Funktion för att logga ut användaren, genom att nollställa sessionvariabeln.
		*/
		public function UserLogsOut()
		{
			if (isset ($_SESSION [$this -> sessionUserLogsIn])) {
				unset ($_SESSION [$this -> sessionUserLogsIn]);				
			}			
		}
		
		// ----------------------------------------------------------------------------------------------------------------------
		// - TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST -
		// ----------------------------------------------------------------------------------------------------------------------		
		public function Test()
		{
			// 2. Vi startar med att försätta oss i utloggat tillstånd genom att anropa funktionen USER LOGS OUT. Som i sin tur kontrollerar om det finns en session => tar bort sessionen.	
			$this -> UserLogsOut();
			
			// 3. Vi kontrollerar om vi är inloggade.
			if ($this -> UserIsLoggedIn() == true) {
				echo "!FEL! i test av kontrollering om vi är i utloggat tillstånd. (DVS: vi är inloggade)";
				return false;	
			}			
			
			// 4. Nu fortsätter vi med ett försöka till att logga in med FEL användar uppgifter. 
			// TEST för att kontrollera om funktionen för att logga in fungerar.(Här ska det INTE fungera att logga in.)		
			if ($this -> UserLogsIn('wrongUsername', 'wrongPassword') == true) {
				echo "!FEL! vid inloggning med fel användar uppgifter.  (User Logs In)";
				return false;	
			}
			
			// 5. Nu fortsätter vi med ett försöka till att logga in med RÄTT användar uppgifter. 
			// TEST för att kontrollera om funktionen för att logga in fungerar.(Här ska det fungera att logga in.)		
			if ($this -> UserLogsIn('Buffy', 'slayer') == false) {
				echo "!FEL! vid inloggning med rätt användar uppgifter.  (User Logs In)";
				return false;	
			}
			
			// 6.Vi kontrollerar om vi är inloggade.
			if ($this -> UserIsLoggedIn() == false) {
				echo "!FEL! Vid inloggning. Vi är inte i ett inloggat tillstånd.";
				return false;	
			}
			
			// 7. Kontrollera om vi kan logga ut med USER LOGS OUT.
			$this -> UserLogsOut();
			
			// 8. Här ska vi försöka logga in med rätt användarnamn med med fel lösenord.
			if ($this -> UserLogsIn('Buffy', 'wrongPassword') == true) {
				echo "!FEL! vid inloggning med fel lösenord.  (User Logs In)";
				return false;	
			}
			return true; // retunerar true om den inte har gått in i någon av testerna och retunerar false så vi kan få ut vårt rätt meddelande i index.php		
		}
	}	
?>